package com.yang.chain_design_pattern.abs;

/**
 * @Description: 处理器链类
 * @Author: 杨 强
 * @CreateTime: 2022-11-01 16:12
 */
public class HandlerChain {
    /**
     * 处理器链的头处理器
     */
    private Handler head = null;
    /**
     * 处理器链的尾处理器
     */
    private Handler tail = null;

    /**
     * 为处理器连添加具体的处理器
     * @param handler 具体的处理器,这里用了多态.
     */
    public void addHandler(Handler handler){
        // 新处理器默认没有下一个处理器
        handler.setSuccessor(null);

        // 如果头处理器为null,就把头处理器和尾处理器都设置为请求的处理器
        if (head == null){
            head = handler;
            tail = handler;
            return;
        }

        // 如果头处理器不为null,说明处理器链中已经有处理器了
        // 设置尾处理器的下一个处理器为请求的处理器
        tail.setSuccessor(handler);
        // 再把尾请求的处理器设置为尾处理器
        tail = handler;
    }

    /**
     * 处理器执行链开始处理请求
     * @param type 请求参数
     */
    public void handle(String type){
        if (head != null){
            head.handle(type);
        }
    }

}
